/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package bean;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import negocio.GestorCertificadoLocal;

/**
 *
 * @author Ing. Monica Merlo, Ing. Agustin  Fernandez
 */

public class CertificadoBean {

    @EJB(beanName="GestorCertificadoBean")
    private GestorCertificadoLocal gestorCertificadoBean;
    private int id;
    private int numero;
    private String fondos;
    private BigDecimal monto;
    private String periodo;
    private Date fechaMedicion;
    private int idEmpresaContratista;
    private String estado="NO PAGADO";
    private int idObra;
    private boolean mostrarAgregar=false;
    private boolean mostrarModificar = false;
    private String nombreObra;
    private String codigoObra;
    private Date fechaInicioObra;
    private Date fechaFinObra;
    private float montoObra;
    private String estadoObra;
    private String nombreEmpresaContratista;

    /** Creates a new instance of CertificadoBean */
    public CertificadoBean() {
    }
    
    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * @return the numero
     */
    public int getNumero() {
        return numero;
    }

    /**
     * @param numero the numero to set
     */
    public void setNumero(int numero) {
        this.numero = numero;
    }

    /**
     * @return the fondos
     */
    public String getFondos() {
        return fondos;
    }

    /**
     * @param fondos the fondos to set
     */
    public void setFondos(String fondos) {
        this.fondos = fondos;
    }

    /**
     * @return the monto
     */
    public BigDecimal getMonto() {
        return monto;
    }

    /**
     * @param monto the monto to set
     */
    public void setMonto(BigDecimal monto) {
        this.monto = monto;
    }

    /**
     * @return the periodo
     */
    public String getPeriodo() {
        return periodo;
    }

    /**
     * @param periodo the periodo to set
     */
    public void setPeriodo(String periodo) {
        this.periodo = periodo;
    }

    /**
     * @return the fechaMedicion
     */
    public Date getFechaMedicion() {
        return fechaMedicion;
    }

    /**
     * @param fechaMedicion the fechaMedicion to set
     */
    public void setFechaMedicion(Date fechaMedicion) {
        this.fechaMedicion = fechaMedicion;
    }

    /**
     * @return the idEmpresaContratista
     */
    public int getIdEmpresaContratista() {
        return idEmpresaContratista;
    }

    /**
     * @param idEmpresaContratista the idEmpresaContratista to set
     */
    public void setIdEmpresaContratista(int idEmpresaContratista) {
        this.idEmpresaContratista = idEmpresaContratista;
    }

    /**
     * @return the estado
     */
    public String getEstado() {
        return estado;
    }

    /**
     * @param estado the estado to set
     */
    public void setEstado(String estado) {
        this.estado = estado;
    }

    /**
     * @return the idObra
     */
    public int getIdObra() {
        return idObra;
    }

    /**
     * @param idObra the idObra to set
     */
    public void setIdObra(int idObra) {
        this.idObra = idObra;
    }
    
    /**
     *
     * @param e
     */
    public void verEstadoCertificadosOyente(ActionEvent e) {
        UIParameter component = (UIParameter) e.getComponent().findComponent("idObraEstadoCertificado");
        this.setIdObra((Integer) Integer.parseInt(component.getValue().toString()));
        component = (UIParameter) e.getComponent().findComponent("idEmpresaEstadoCertificado");
        this.setIdEmpresaContratista((Integer) Integer.parseInt(component.getValue().toString()));
        component = (UIParameter) e.getComponent().findComponent("nombreObraEstadoCertificado");
        this.setNombreObra(component.getValue().toString());
        component = (UIParameter) e.getComponent().findComponent("nombreEmpresaEstadoCertificado");
        this.setNombreEmpresaContratista(component.getValue().toString());
        component = (UIParameter) e.getComponent().findComponent("fechaInicioObraEstadoCertificado");
        if(component.getValue()!=null)this.setFechaInicioObra((Date)component.getValue());
        else this.setFechaInicioObra(null);
        component = (UIParameter) e.getComponent().findComponent("fechaFinObraEstadoCertificado");
        if(component.getValue()!=null)this.setFechaFinObra((Date)component.getValue());
        else this.setFechaFinObra(null);
        component = (UIParameter) e.getComponent().findComponent("codigoObraEstadoCertificado");
        if(component.getValue()!=null)this.setCodigoObra(component.getValue().toString());
        else this.setCodigoObra("");
        component = (UIParameter) e.getComponent().findComponent("montoObraEstadoCertificado");
        if(component.getValue()!=null)this.setMontoObra(Float.parseFloat(component.getValue().toString()));
        else this.setMontoObra(0.0f);
        component = (UIParameter) e.getComponent().findComponent("estadoObraEstadoCertificado");
        if(component.getValue()!=null)this.setEstadoObra(component.getValue().toString());
        else this.setEstadoObra("");

    }

    /**
     *
     * @return
     */
    public List getCertificadosObra() {
        List<datos.Certificado> certificados = this.gestorCertificadoBean.verCertificadosObra(this.idObra);
        int i = 0;
        BigDecimal acumulado = new BigDecimal("0.00");
        float porcentaje = 0.0f;
        BigDecimal montoTotalObra = new BigDecimal("0.00");
        for (datos.Certificado c : certificados) {
            if (i == 0) {
                c.setFinancieroParcial(c.getMonto());
                c.setFinancieroAcumulado(c.getMonto());
                acumulado=acumulado.add(c.getMonto());
                montoTotalObra = c.getIdObra().getMontoTotal();
                porcentaje = 0.0f;
                if(montoTotalObra.compareTo(BigDecimal.ZERO)!=0)porcentaje = (acumulado.floatValue() * 100) / montoTotalObra.floatValue();
                c.setPorcentajeFinanciero(porcentaje);
            } else {
                c.setFinancieroParcial(c.getMonto());
                acumulado = acumulado.add(c.getMonto());
                c.setFinancieroAcumulado(acumulado);
                montoTotalObra = c.getIdObra().getMontoTotal();
                porcentaje = 0.0f;
                if(montoTotalObra.compareTo(BigDecimal.ZERO)!=0)porcentaje = (acumulado.floatValue() * 100) / montoTotalObra.floatValue();
                c.setPorcentajeFinanciero(porcentaje);
            }
            i++;
        }
        //return this.gestorCertificadoBean.verCertificadosObraRemote(this.idObra);
        return certificados;
    }

    /**
     *
     * @param e
     */
    public void guardarCertificadoOyente(ActionEvent e) {
        this.mostrarAgregar = true;
        this.mostrarModificar = false;
        this.setNumero(0);
        this.setPeriodo("");
        this.setFechaMedicion(null);
        this.setMonto(new BigDecimal("0.00"));
        this.setFondos("");
        this.setEstado("NO PAGADO");

    }

    /**
     *
     * @return
     */
    public String guardarCertificado() {
        this.gestorCertificadoBean.agregarCertificado(numero, periodo, fechaMedicion, monto, fondos, -1, estado, idObra, idEmpresaContratista);
        this.mostrarAgregar = false;
        this.mostrarModificar = false;
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage("Certificado guardado con exito", ""));
        return null;
    }

    /**
     *
     * @param e
     */
    public void modificarCertificadoOyente(ActionEvent e) {
        this.mostrarModificar=true;
        this.mostrarAgregar=false;
        UIParameter component = (UIParameter) e.getComponent().findComponent("idModificar");
        this.setId((Integer) Integer.parseInt(component.getValue().toString()));
        component = (UIParameter) e.getComponent().findComponent("numero");
        this.setNumero(Integer.parseInt(component.getValue().toString()));
        component = (UIParameter) e.getComponent().findComponent("periodo");
        this.setPeriodo(component.getValue().toString());

        component = (UIParameter) e.getComponent().findComponent("fechaMedicion");
        this.setFechaMedicion((Date) component.getValue());

        component = (UIParameter) e.getComponent().findComponent("monto");
        this.setMonto(new BigDecimal(component.getValue().toString()));
        component = (UIParameter) e.getComponent().findComponent("fondos");
        this.setFondos(component.getValue().toString());
        component = (UIParameter) e.getComponent().findComponent("estado");
        this.setEstado(component.getValue().toString());

        
    }

    /**
     *
     * @return
     */
    public String modificarCertificado() {
        this.gestorCertificadoBean.modificarCertificado(id, numero, periodo, fechaMedicion, monto, fondos, -1, estado);
        this.mostrarAgregar = false;
        this.mostrarModificar = false;
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage("Certificado modificado con exito", ""));
        return null;
    }

    /**
     *
     * @param e
     */
    public void eliminarCerificadoOyente(ActionEvent e){
        UIParameter component = (UIParameter) e.getComponent().findComponent("idBorrar");
        this.setId(Integer.parseInt(component.getValue().toString()));
    }

    /**
     *
     * @return
     */
    public String eliminarCertificado(){
        this.gestorCertificadoBean.eliminarCertificado(this.getId());
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage("Certificado eliminado con exito", ""));
        return null;
    }

    /**
     *
     * @return
     */
    public List<String> getEstados() {
        return this.gestorCertificadoBean.estadosCertificado();
    }

    /**
     *
     * @param e
     */
    public void cancelarOyente(ActionEvent e) {
        this.mostrarModificar = false;
        this.mostrarAgregar = false;
        this.setNumero(0);
        this.setPeriodo("");
        this.setFechaMedicion(null);
        this.setMonto(new BigDecimal("0.00"));
        this.setFondos("");
        this.setEstado("");
    }

    /**
     * @return the mostrarAgregar
     */
    public boolean isMostrarAgregar() {
        return mostrarAgregar;
    }

    /**
     * @param mostrarAgregar the mostrarAgregar to set
     */
    public void setMostrarAgregar(boolean mostrarAgregar) {
        this.mostrarAgregar = mostrarAgregar;
    }

    /**
     * @return the mostrarModificar
     */
    public boolean isMostrarModificar() {
        return mostrarModificar;
    }

    /**
     * @param mostrarModificar the mostrarModificar to set
     */
    public void setMostrarModificar(boolean mostrarModificar) {
        this.mostrarModificar = mostrarModificar;
    }

   /**
     * @return the nombreObra
     */
    public String getNombreObra() {
        return nombreObra;
    }

    /**
     * @param nombreObra the nombreObra to set
     */
    public void setNombreObra(String nombreObra) {
        this.nombreObra = nombreObra;
    }

    /**
     * @return the codigoObra
     */
    public String getCodigoObra() {
        return codigoObra;
    }

    /**
     * @param codigoObra the codigoObra to set
     */
    public void setCodigoObra(String codigoObra) {
        this.codigoObra = codigoObra;
    }

    /**
     * @return the fechaInicioObra
     */
    public Date getFechaInicioObra() {
        return fechaInicioObra;
    }

    /**
     * @param fechaInicioObra the fechaInicioObra to set
     */
    public void setFechaInicioObra(Date fechaInicioObra) {
        this.fechaInicioObra = fechaInicioObra;
    }

    /**
     * @return the fechaFinObra
     */
    public Date getFechaFinObra() {
        return fechaFinObra;
    }

    /**
     * @param fechaFinObra the fechaFinObra to set
     */
    public void setFechaFinObra(Date fechaFinObra) {
        this.fechaFinObra = fechaFinObra;
    }

    /**
     * @return the montoTotalObra
     */
    public float getMontoObra() {
        return montoObra;
    }

    /**
     * @param montoObra
     */
    public void setMontoObra(float montoObra) {
        this.montoObra = montoObra;
    }

    /**
     * @return the estadoObra
     */
    public String getEstadoObra() {
        return estadoObra;
    }

    /**
     * @param estadoObra the estadoObra to set
     */
    public void setEstadoObra(String estadoObra) {
        this.estadoObra = estadoObra;
    }

    /**
     * @return the nombreEmpresaContratista
     */
    public String getNombreEmpresaContratista() {
        return nombreEmpresaContratista;
    }

    /**
     * @param nombreEmpresaContratista the nombreEmpresaContratista to set
     */
    public void setNombreEmpresaContratista(String nombreEmpresaContratista) {
        this.nombreEmpresaContratista = nombreEmpresaContratista;
    }
}
